package com.itheima.common;

import lombok.Data;

/**
 * @author robin
 * @version 1.0
 * ResultResponse: 封装响应结果（包括状态码）
 */
@Data
public class ResultResponse<T> {
    /**
     * 1.响应的状态码 200,300,400,500,1000
     */
    private Integer code;
    /**
     * 2.响应是否成功
     */
    private Boolean isSuccess;
    /**
     * 3.响应操作描述信息
     */
    private String message;
    /**
     * 4.响应携带数据
     */
    private T data;

    public ResultResponse(ResultCode resultCode, T data) {
        this.code = resultCode.getCode();
        this.isSuccess = resultCode.getIsSuccess();
        this.message = resultCode.getMessage();
        this.data = data;
    }

    public ResultResponse(ResultCode resultCode) {
        this.code = resultCode.getCode();
        this.isSuccess = resultCode.getIsSuccess();
        this.message = resultCode.getMessage();
    }

    /**
     * 操作成功：ResultResponse,要携带数据 static <T> 代表声明了静态泛型方法
     *
     * @param data
     * @param <T>
     * @return
     */
    public static <T> ResultResponse<T> SUCCESS(T data) {
        //确定状态+数据
        return new ResultResponse<T>(ResultCode.SUCCESS, data);
    }

    /**
     * 操作失败：ResultResponse,不需要传递数据，只需要声明状态
     *
     * @param resultCode
     * @param <T>
     * @return
     */
    public static <T> ResultResponse<T> FAIL(ResultCode resultCode) {
        //确定状态+数据
        return new ResultResponse<T>(resultCode);
    }
}
